package com.we.service.impl;

import com.we.dao.TagDao;
import com.we.entity.Note;
import com.we.entity.PageBean;
import com.we.entity.Tag;
import com.we.service.TagService;
import com.we.util.MybatisUtils;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

/**
 * @Description 标签业务逻辑接口实现类
 * @Author cr7
 * @Date 2021-11-14 19:37
 * @Version V1.0
 */
public class TagServiceImpl implements TagService {

    private SqlSession session = MybatisUtils.getSqlSession();
    private TagDao dao = session.getMapper(TagDao.class);

    /**
     * 查询所有标签数量功能实现
     *
     * @return
     */
    @Override
    public int findTagCount() {
        return dao.findTagCount();
    }

    /**
     * 分页查询所有标签名及数量功能实现
     *
     * @param currentPage
     * @param pageSize
     * @return
     */
    @Override
    public PageBean<Tag> findAllTagByPage(int currentPage, int pageSize) {
        PageBean<Tag> pb = new PageBean<>();
        pb.setCurrentPage(currentPage);
        pb.setPageSize(pageSize);
        int totalCount = dao.findTagCount();
        pb.setTotalCount(totalCount);

        //设置当前页显示的数据集合
        int start = (currentPage - 1) * pageSize;//开始的记录数
        List list = dao.findAllTagByPage(start, pageSize);
        pb.setList(list);

        //设置总页数 = 总记录数/每页显示条数
        int totalPage = totalCount % pageSize == 0 ? totalCount / pageSize : (totalCount / pageSize) + 1;
        pb.setTotalPage(totalPage);
        return pb;
    }

    /**
     * 查询指定标签功能实现
     * @param tagName
     * @return
     */
    @Override
    public int findTagByTagName(String tagName) {
        return dao.findTagByTagName(tagName);
    }

    /**
     * 添加标签功能实现
     * @param tagName
     * @return
     */
    @Override
    public int addTag(String tagName) {
        return dao.addTag(tagName);
    }

    /**
     * 删除标签功能实现
     * @param tagName
     * @return
     */
    @Override
    public int deleteTagByTagName(String tagName) {
        return dao.deleteTagByTagName(tagName);
    }

    /**
     * 保存笔记标签功能实现
     * @param tagName
     * @param noteID
     */
    @Override
    public void saveTag(String tagName, int noteID) {
        dao.saveTag(tagName,noteID);
    }

    /**
     * 根据笔记id查询标签功能实现
     * @param noteID
     * @return
     */
    @Override
    public List<Tag> findTagById(int noteID) {
        return dao.findTagById(noteID);
    }

    /**
     * 修改标签名称功能
     * @param tagName
     * @return
     */
    @Override
    public int updateTagName(String tagName,String tagName1) {
        return dao.updateTagName(tagName,tagName1);
    }

    /**
     * 查询所有标签及其数量功能
     * @return
     */
    @Override
    public List findAllTag() {
        return dao.findAllTag();
    }

    /**
     * 查询标签下的笔记功能实现
     * @param tagName
     * @param currentPage
     * @param pageSize
     * @return
     */
    @Override
    public PageBean<Note> findNoteByTag(String tagName, int currentPage, int pageSize) {
        PageBean<Note> pb = new PageBean<>();
        pb.setCurrentPage(currentPage);
        pb.setPageSize(pageSize);
        int totalCount = dao.findNoteByTagCount(tagName);
        pb.setTotalCount(totalCount);
        //设置当前页显示的数据集合
        int start = (currentPage - 1) * pageSize;//开始的记录数
        List<Note> list = dao.findNoteByTag(tagName,start, pageSize);
        pb.setList(list);
        //设置总页数 = 总记录数/每页显示条数
        int totalPage = totalCount % pageSize == 0 ? totalCount / pageSize : (totalCount / pageSize) + 1;
        pb.setTotalPage(totalPage);
        return pb;
    }
}
